package com.main.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.generico.dao.ctg.CtgCatalogoDao;
import com.generico.dao.ctg.CtgDepartamentoDao;
import com.generico.dao.ctg.CtgMunicipioDao;
import com.main.cliente.dto.SgiPersona;
import com.main.dao.ClienteDAO;
import com.main.dao.SgiPersonaDao;
import com.main.dao.UserDAO;
import com.main.java.Cliente;
import com.web.util.GenericoUtil;

@Controller
@RequestMapping("/cliente")
public class ClienteActualizacionDatosController extends BaseController{

	@Autowired
	private ClienteDAO clienteDAO;
	
	@Autowired
	private SgiPersonaDao sgiPersonaDao;
	
	@Autowired
	private CtgMunicipioDao ctgMunicipioDao;
	
	@Autowired
	private UserDAO userDAO;
	
	@Autowired
	private CtgCatalogoDao ctgCatalogoDao;
	
	@Autowired
	private CtgDepartamentoDao ctgDepartamentoDao;
	
	@RequestMapping("/actualizarDatosView")
	public String view(ModelMap model, @RequestParam("usuarioId") Long usuarioId){
		if(usuarioId != null && usuarioId > 0){
			try {
				usuarioId = GenericoUtil.getSgdUsuarioIdFromAcegi();
				model.put("userName", GenericoUtil.getUserName());
				model.put("usuarioId", usuarioId);
				
				
				SgiPersona persona = new SgiPersona();
				Object[] cliente;
				cliente = clienteDAO.obtenerClientePorId(usuarioId);
				persona = sgiPersonaDao.obtenerPersona(usuarioId);
				
				
				
				
				/**Codigo para evitar un relaciones ciclicas de las tablas**/
//				JsonConfig config = new JsonConfig();
//				config.setExcludes(new String[]{"user", "ctgmunicipio"});
//				config.setIgnoreDefaultExcludes(false);
//				config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//
//				JSONObject jsonObject = JSONObject.fromObject(persona, config);
				if (persona != null) {
					
				
				
				model.put("primerNombre", persona.getPersonaPrimerNombre());
				model.put("segundoNombre", persona.getPersonaSegundoNombre());
				model.put("primerApellido", persona.getPersonaPrimerApellido());
				model.put("segundoApellido", persona.getPersonaSegundoApellido());
				model.put("email", persona.getPersonaEmail());
				model.put("direccion", persona.getPersonaDireccion());
				model.put("sgiPersonaId", persona.getSgiPersonaId());
				model.put("personaTelefono1", persona.getPersonaTelefono1());
				model.put("personaTelefono2", persona.getPersonaTelefono2());
				model.put("personaTelefono3", persona.getPersonaTelefono3());
				model.put("personaDocumento1", persona.getPersonaDocumento1());
				model.put("personaDocumento2", persona.getPersonaDocumento2());
				}
				if (cliente != null) {
				model.put("tipoCliente", cliente[2] == null ? "0":StringUtils.trimToEmpty(cliente[2].toString()));
				model.put("numeroCuenta", cliente[1] == null ? "0":StringUtils.trimToEmpty(cliente[1].toString()));	
//				model.put("iraMunicipio", persona.getPersonaDocumento3());
				model.put("ctgmunicipio", cliente[3] == null ? "0":GenericoUtil.trimToZero(cliente[3].toString()));
				model.put("ctgDepartamento", cliente[4] == null ? "0":GenericoUtil.trimToZero(cliente[4].toString()));
				}
				
				
				model.put("userName", usuarioId);
				model.put("departamentos", JSONArray.fromObject(ctgDepartamentoDao.findAllActives()));
				model.put("municipios", JSONArray.fromObject(ctgMunicipioDao.findAllActives()));
				model.put("ctgTipoPersona", JSONArray.fromObject(ctgCatalogoDao.findAllActivesAsArray(GenericoUtil.CTG_TIPO_PERSONA)));
				
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		return "cliente/actualizacionDatos";
	}
	
	
	@RequestMapping(value = "/actualizarDatosSave", method = {RequestMethod.POST})
	public void save(HttpServletResponse response,
			@ModelAttribute(value = "sgiPersona")  SgiPersona sgiPersona, 
			@RequestParam("usuarioId") Long usuarioId,
			@RequestParam("tipoCliente") Long tipoCliente,
			@RequestParam("ctgmunicipioId") Long ctgmunicipioId,
			@RequestParam("departamentoId") Long departamentoId,
			@RequestParam("numeroCuenta") String numeroCuenta
			) {
		Map<String, Object> result = new HashMap<String, Object>();
		Cliente cliente = new Cliente();
		SgiPersona per = new SgiPersona();
		
		try{
			if(sgiPersona != null){
				
				sgiPersona.setUser(userDAO.getUserById(usuarioId));
				per = sgiPersonaDao.encontrarPersonaPorId(sgiPersona.getSgiPersonaId());
				per.setPersonaEmail(sgiPersona.getPersonaEmail());
				per.setPersonaDireccion(sgiPersona.getPersonaDireccion());
				per.setPersonaDocumento1(sgiPersona.getPersonaDocumento1());
				per.setPersonaDocumento2(sgiPersona.getPersonaDocumento2());
				per.setPersonaTelefono1(sgiPersona.getPersonaTelefono1());
				per.setPersonaTelefono2(sgiPersona.getPersonaTelefono2());
				per.setPersonaTelefono3(sgiPersona.getPersonaTelefono2());
				per.setCtgDepartamento(ctgDepartamentoDao.obtenerCtgDepartamentoPorId(departamentoId));
				per.setCtgmunicipio(ctgMunicipioDao.obtenerMunicipioPorId(ctgmunicipioId));
				
				cliente = clienteDAO.encontrarClientePorUsuarioId(usuarioId);
				cliente.setCtgCatalogo(ctgCatalogoDao.findByCtgCatalogoId(tipoCliente));
				cliente.setClienteNumeroDeCuenta(numeroCuenta);
				
				clienteDAO.guardarCliente(cliente);
				sgiPersonaDao.savePersona(per);
				
				result.put(SUCCESS, true);
				result.put(MESSAGE, "Datos Personales Actualizados");
			}else{
				result.put(FAILURE, true);
				result.put(MESSAGE, GenericoUtil.ERROR_MESSAGE);
			}
		}catch(Exception e){
			result.put(FAILURE, true);
			result.put(MESSAGE, GenericoUtil.getExceptionMessage(e));
		}
		serializeObject(result, response);
	}
	
	
	
	
	
	
}
